
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>项目用到了那些微服务组件 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>项目用到了那些微服务组件 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在微服务架构中，“服务注册与发现”模式的核心流程是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心流程包括四个部分：1. 服务注册中心作为集中管理器；2. 服务提供者在启动时向中心注册自己的信息（如名称、地址、端口）；3. 服务消费者向中心查询所需服务，获取可用实例列表；4. 注册中心通过心跳机制检查服务健康状态，并剔除异常实例。</div>
          </div>
          <div class="card-source">来源: 服务注册与发现 - 1. 组件和流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">什么是负载均衡中的“IP哈希”策略？它主要用于解决什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">IP哈希策略是根据请求的源IP地址计算哈希值，然后将同一IP的请求始终分发到同一台服务器。这种策略主要用于保证会话一致性。</div>
          </div>
          <div class="card-source">来源: 负载均衡 - 1. 负载均衡策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">除了常见的HTTP/HTTPS调用，微服务之间还有哪些其他的服务调用方式？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">其他常见的服务调用方式包括：RPC（远程过程调用，如gRPC、Dubbo）、消息队列（用于异步通信，如RabbitMQ、Kafka）以及WebSocket（用于双向通信）。</div>
          </div>
          <div class="card-source">来源: 服务调用 - 1. 基本方式和协议</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">“断路器”模式是如何工作的？请描述其状态切换流程。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当受保护的服务正常时，断路器处于“关闭”状态。当检测到服务出现问题（如超时或异常），断路器切换到“打开”状态，后续请求会直接失败。经过一段时间后，断路器会进入“半开”状态，允许部分请求通过以测试服务是否恢复，若恢复则回到“关闭”状态。</div>
          </div>
          <div class="card-source">来源: 断路器 - 1. 工作流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">使用“断路器”模式能带来哪些好处？它如何避免“雪崩效应”？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">好处包括快速响应、自我修复和降级保护。它通过在大量请求访问一个不可用服务时快速阻止这些请求，来避免因一个服务的故障导致整个系统连锁崩溃的“雪崩效应”。</div>
          </div>
          <div class="card-source">来源: 断路器 - 2. 好处和优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">“分布式配置”中心主要为了满足哪些核心需求？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">分布式配置主要满足四个核心需求：1. 集中管理：统一管理所有环境的配置；2. 动态更新：在不重启应用的情况下修改配置；3. 版本控制：支持配置回滚和历史追溯；4. 安全性：保护敏感配置信息。</div>
          </div>
          <div class="card-source">来源: 分布式配置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">作用</div>
          <div class="card-question">服务网关（Service Gateway）在微服务架构中扮演了哪些关键角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">作用</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">服务网关的关键角色包括：作为系统的统一访问点、进行路由和负载均衡、处理安全认证与授权、收集监控和日志、实现协议转换以及进行服务聚合和组合。</div>
          </div>
          <div class="card-source">来源: 服务网关</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">“分布式追踪”是如何实现跨多个服务追踪一个完整请求链路的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它通过为每个请求分配一个唯一的标识符（Trace ID），并在整个调用链路中通过HTTP头部或消息头部传播这个ID。这样，所有相关的服务都能关联到同一个请求，从而形成完整的调用链路图。</div>
          </div>
          <div class="card-source">来源: 分布式追踪 - 1. 实现方式和技术栈</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">消息队列如何实现“削峰填谷”的功能？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通过将消息队列作为缓冲区，它可以平滑处理流量峰值。当突发流量到来时，请求会先进入队列，由消费者按照自己的处理能力进行消费，从而避免因瞬间流量过大导致系统崩溃或性能下降。</div>
          </div>
          <div class="card-source">来源: 消息队列 - 2. 消息队列的优势和用途</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">服务注册中心是如何判断一个微服务实例是否健康的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">注册中心通过定期接收微服务发送的心跳信息来判断其健康状态。如果某个服务长时间未发送心跳或者其状态异常，注册中心会将其标记为不可用。</div>
          </div>
          <div class="card-source">来源: 服务注册与发现 - 1. 组件和流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">请对比硬件负载均衡器和软件负载均衡器的主要特点。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">硬件负载均衡器是专用硬件设备（如F5），能处理大量并发请求，性能高。软件负载均衡器是软件（如Nginx），常用于应用层负载均衡，优点是灵活性高、成本低。</div>
          </div>
          <div class="card-source">来源: 负载均衡 - 2. 实现方式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">作用</div>
          <div class="card-question">分布式追踪技术在微服务架构中的主要目的是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">作用</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要目的有三个：1. 请求链路跟踪，记录和分析请求在系统内的传播路径；2. 性能监控和优化，识别潜在瓶颈；3. 故障排查和问题定位，快速定位异常和错误。</div>
          </div>
          <div class="card-source">来源: 分布式追踪</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
